package com.mlming.springboot.interceptors;

import com.auth0.jwt.exceptions.JWTVerificationException;
import com.mlming.springboot.consts.MallConst;
import com.mlming.springboot.exceptions.UserLoginException;
import com.mlming.springboot.pojo.User;
import com.mlming.springboot.util.JWTUtil;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class UserLoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // User user = (User) request.getSession().getAttribute(MallConst.CURRENT_USER);
        // // 如果用户是null,则没有登录
        // if(user == null) {
        //     // 不推荐使用response向前端打印信息,因为我们已经封装好一个vo类来返回信息了,所以我们推荐下面一种方式:
        //     // 抛出RuntimeException类型错误,从而可以被全局异常处理器捕捉到,然后向前端返回信息
        //     throw new UserLoginException();
        // }

        // 从header中获取token
        String token = request.getHeader("token");
        if(token == null) throw new UserLoginException();
        // 验证token, 如果出错, 为了保密, 返回的应该是登录失效的错误
        try {
            JWTUtil.verifyToken(token);
        } catch (JWTVerificationException e) {
            throw new UserLoginException();
        }
        // 如果上面没报错,说明是处于登录状态,放行
        return true;
    }
}
